package com.vshop.mapper.task;

import com.vshop.entity.alast.common.MerchantServicePlanOrderRecord;
import com.vshop.entity.alast.common.PartnerServicePlan;
import com.vshop.entity.alast.common.ServicePlanOrderRecord;
import com.vshop.entity.alast.linksentity.LinksOrdersPayment;
import com.vshop.entity.comentity.DevicePackagesRelation;
import com.vshop.entity.comentity.PartnerInfo;
import com.vshop.entity.comentity.PartnerPackage;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author lm
 * @date 2020/9/24 10:50
 */
@Mapper
public interface ServicePlanTaskMapper {
    /**
     * 查询有没有需要去做查询确认订单状态的订单列表
     *
     * @return
     */
    List<ServicePlanOrderRecord> queryServicePlanStatus();

    /**
     * 更新orderId的状态，订购时间，激活时间，预计结束时间
     *
     * @param record
     * @return
     */
    Integer updateOrderIdStatus(ServicePlanOrderRecord record);

    /**
     * 查询需要去做开通订单操作的订单列表
     *
     * @return
     */
    List<ServicePlanOrderRecord> queryServicePlanIsOpen();

    /**
     * 卡片是OTA卡片，以后再也不要发起开通了，这边把订单的isOpen状态改成1,以后不再参与轮循了
     *
     * @param record
     * @return
     */
    Integer updateOtaFlagIsOpen(ServicePlanOrderRecord record);

    /**
     * 每个月的15号去执行将包含上个月和之前的数据（service_plan_order_record_t）转移到（service_plan_order_record_hist_t）的操作
     *
     * @return
     */
    Integer oldDataTransfer();

    /**
     * 转移执行完成之后将service_plan_order_record_t表中包含上个月和之前的空单删掉
     *
     * @return
     */
    Integer oldEmptyDataDelete();

    /**
     * 查询links的user_order_payment_manager_t表
     *
     * @return
     */
    List<LinksOrdersPayment> queryOrderPaymentList();

    /**
     * 将links的user_order_payment_manager_t表中的数据写入到v-shop的service_plan_order_record_t表
     *
     * @param or
     * @return
     */
    Integer syncData(ServicePlanOrderRecord or);

    /**
     * 回去告诉links的user_order_payment_manager_t表我收到记录了
     *
     * @param linksOrders
     * @return
     */
    Integer updateLinksIsSync(LinksOrdersPayment linksOrders);

    /**
     * 根据渠道编码和套餐编码查询上架的套餐名称和套餐编码
     *
     * @param partnerCode
     * @param packageCode
     * @return
     */

    List<PartnerServicePlan> queryServicePlanShow(@Param("partnerCode") String partnerCode,
                                                  @Param("packageCode") String packageCode);

    /**
     * 查询数据库里面是否已经有这个企业的数据
     *
     * @param partnerCode
     * @return
     */
    Integer findPartnerExistOrNot(@Param("partnerCode") String partnerCode);

    /**
     * 入库企业信息 ：partner_info_t
     *
     * @param partner
     * @return
     */
    Integer insertPartner(PartnerInfo partner);

    /**
     * 有partnerCode就根据partnerCode取企业信息查询，没有partnerCode就拿全部企业信息
     *
     * @param partnerCode
     * @return
     */
    List<PartnerInfo> findPartnerCode(@Param("partnerCode") String partnerCode);

    /**
     * 用partnerCode去数据表查看看有没有存在这个记录，有的话就不需要去请求同步的企业
     *
     * @param partnerCode
     * @return
     */
    Integer queryOrNotPartnerCode(@Param("partnerCode") String partnerCode);

    /**
     * 根据partnerCode和packageCode查询数据表有没有这条记录
     *
     * @param partnerCode
     * @param packageCode
     * @return
     */
    Integer findPackageByCondition(@Param("partnerCode") String partnerCode,
                                   @Param("packageCode") String packageCode);

    /**
     * 根据mcc匹配对应的大洲中文名称
     *
     * @param mcc
     * @return
     */
    String queryContinent(@Param("all_country_code") String mcc);

    /**
     * 根据mcc匹配对应的大洲英文名称
     *
     * @param mcc
     * @return
     */
    String queryContinentEN(@Param("all_country_code") String mcc);

    /**
     * 根据mcc匹配对应的国家英文名称
     *
     * @param mcc
     * @return
     */
    String queryCountryEN(@Param("all_country_code") String mcc);

    /**
     * 入库原始套餐数据
     *
     * @param product
     * @return
     */
    Integer storagePartnerPackage(PartnerPackage product);

    /**
     * 用partnerCode和packageCode查询原始套餐的状态
     *
     * @param partnerCode
     * @param packageCode
     * @return
     */
    String queryPackageStatusByCode(@Param("partnerCode") String partnerCode,
                                    @Param("packageCode") String packageCode);

    /**
     * 更新partnerCode和packageCode原始套餐的状态
     *
     * @param product
     * @return
     */
    Integer updatePackageStatus(PartnerPackage product);

    /**
     * 更新partnerCode和packageCode新建套餐的状态
     *
     * @param servicePlan
     * @return
     */
    Integer updateServicePlanStatus(PartnerServicePlan servicePlan);

    /**
     * 根据partnerCode和packageCode去原始套餐表匹配套餐的原始套餐中文名称
     *
     * @param partnerCode
     * @param packageCode
     * @return
     */
    String queryPackageNameByCode(@Param("partnerCode") String partnerCode,
                                  @Param("packageCode") String packageCode);

    /**
     * 查询对应数据库："partner_device_packages_relation_t_" + partnerIndex有没有某条数据
     *
     * @param tableName
     * @param partnerCode
     * @param packageCode
     * @param deviceCode
     * @return
     */
    Integer findCountByCondition(@Param("tableName") String tableName,
                                 @Param("partnerCode") String partnerCode,
                                 @Param("packageCode") String packageCode,
                                 @Param("deviceCode") String deviceCode);

    /**
     * 入库数据："partner_device_packages_relation_t_" + partnerIndex
     *
     * @param tableName
     * @param relation
     * @return
     */
    Integer storageRelation(@Param("tableName") String tableName,
                            @Param("relation") DevicePackagesRelation relation);

    /**
     * 原始数据表更新数据表里面的serviceCycleCount字段的值
     * <p>
     * partner_package_t
     *
     * @param product
     * @return
     */
    Integer updatePartnerPackageCycleCount(PartnerPackage product);

    /**
     * 将成功的交易数据查询出来：v-shop.service_plan_order_record_t
     *
     * @return
     */
    List<ServicePlanOrderRecord> queryServicePlanOrderRecordList();

    /**
     * 根据iccId查询设备分类： goods_center_prod.asset_class
     *
     * @param deviceCode
     * @return
     */
    String queryDeviceSort(@Param("asset_id") String deviceCode);

    /**
     * 将交易数据逐条入库到：goods_center_prod.service_plan_order_record_t
     *
     * @param or
     * @return
     */
    Integer syncOrderData(MerchantServicePlanOrderRecord or);
}
